﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utilities;


namespace BusinessLogicLayer
{
    public class TheLoaiManager
    {
        public ActionResultAsList<TheLoai> LayDSTheLoai()
        {
            var ar = new ActionResultAsList<TheLoai>();
            try
            {
                using (var db = new ThuVienDbContext())
                {
                    ar.ObjectList = db.TheLoais.ToList();
                }
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                ar.AddException(ex);
            }
            return ar;
        }
        public ActionResult ThemTheLoai(ref TheLoai theloai)
        {
            var ar = new ActionResult();
            using (var db = new ThuVienDbContext())
            {
                try
                {
                    db.TheLoais.Add(theloai);
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    Logger.Write(ex);
                    ar.AddException(ex);
                }
            }
            return ar;
        }
        public ActionResult XoaTheLoai(string matheloai)
        {
            var ar = new ActionResult();
            using (var db = new ThuVienDbContext())
            {
                try
                {
                    var theloai = db.TheLoais.Single(t => t.MaTheLoai == matheloai);
                    db.TheLoais.Remove(theloai);
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    Logger.Write(ex);
                    ar.AddException(ex);
                }

            }
            return ar;
        }
        public ActionResult SuaTheLoai(TheLoai theloai)
        {
            var ar = new ActionResult();
            using (var db = new ThuVienDbContext())
            {
                try
                {
                    var t = db.TheLoais.Single(s => s.MaTheLoai == theloai.MaTheLoai);
                    t.MaTheLoai = theloai.MaTheLoai;
                    t.TenTheLoai = theloai.TenTheLoai;
                    t.MoTa = theloai.MoTa;
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    Logger.Write(ex);
                    ar.AddException(ex);
                }

            }
            return ar;
        }
        public ActionResultAsList<TheLoai> TimKiemTheLoaiTheoMa(string matheloai)
        {
            var ar = new ActionResultAsList<TheLoai>();
            try
            {
                using (var db = new ThuVienDbContext())
                {
                    var list = db.TheLoais.Where(n => n.MaTheLoai == matheloai);
                    ar.ObjectList = list.ToList();
                }
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                ar.AddException(ex);
            }
            return ar;
        }
        public ActionResultAsList<TheLoai> TimKiemTheLoaiTheoTen(string tentheloai)
        {
            var ar = new ActionResultAsList<TheLoai>();
            try
            {
                using (var db = new ThuVienDbContext())
                {
                    var list = db.TheLoais.Where(n => n.TenTheLoai == tentheloai);
                    ar.ObjectList = list.ToList();
                }
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                ar.AddException(ex);
            }
            return ar;
        }
        public ValidateResult KiemTraTrungMa(string matheloai)
        {

            ValidateResult vr = new ValidateResult();
            try
            {
                using (var db = new ThuVienDbContext())
                {
                    var trungma = db.TheLoais.Where(s => s.MaTheLoai == matheloai);
                    if (trungma.Any())
                        vr.AddMessage("Trung ma the loai");
                }
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
                vr.AddMessage(ex.Message);
            }
            return vr;
        }       
        public ValidateResult KiemTraHopLe(TheLoai theloai)
        {
            ValidateResult vr = new ValidateResult();
            if (theloai.MaTheLoai =="")
                vr.AddMessage("Chưa nhập mã thể loại!");
            if (theloai.TenTheLoai == "")
                vr.AddMessage("Chưa nhập tên thể loại!");
            if (theloai.MoTa == "")
                vr.AddMessage("Chưa nhập mô tả thể loại!");
            return vr;
        }
    }
}
